package com.xlhl.mybatisplusplus.anno;

import java.lang.annotation.*;

/**
 * MyBatis Plus 查询类型
 * <p>被 {@link QueryType} 修饰的属性名需要与数据库对应 默认会将驼峰转下划线</p>
 *
 * @author xlhl
 */
@Documented
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryType {

    /**
     * 条件类型
     *
     * @return 对应 mybatis plus 查询类型
     */
    Type value() default Type.EQ;

    /**
     * 查询类型
     */
    enum Type {
        /**
         * 模糊查询
         */
        LIKE,

        /**
         * 精确查询
         */
        EQ,

        /**
         * <P>如果被 Type.BETWEEN 标识，则字段类型必须是一个 List；[0]表示左区间  [1]表示右区间</P>
         *
         * <p>不符合规则则什么也不会发生</p>
         * 区间类型
         */
        BETWEEN,

        /**
         * 大于 搜索出来的结果会大于这个值
         */
        GREATER_THAN,

        /**
         * 小于 搜索出来的结果会小于这个值
         */
        LESS_THAN,

        /**
         * 在这之间 需要类型是一个 List
         */
        IN,

        /**
         * 不在这之间 需要类型是一个 List
         */
        NOT_IN
    }
}
